]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
showOSD: Fix handling of defined 'falsy' parameters
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 1 Aug 2018 11:27:07 +0000 (13:27 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 1 Aug 2018 11:58:23 +0000 (13:58 +0200)
For the OSD, all parameters except for the icon are optional - if the
caller doesn't include the 'label' option, the OSD won't show a label
etc.

While this makes sense for an API, it means that we have to be careful
to correctly differentiate an option that was omitted and an option
that has a 'falsy' value like false or 0.

Unfortunately since commit ccaae5d3c we no longer do, with the result
that OSDs meant for the first monitor will show up on all, and a level
of 0 is presented as no level bar instead of an empty one, whoops.

https://bugzilla.gnome.org/show_bug.cgi?id=791669

js/ui/shellDBus.js

index 55e1e573738549e8634cd99386d05323e05216a6..4d60ef45b821cedc68887b21f74a0894011748af 100644 (file)
@@ -145,14 +145,18 @@ var GnomeShell = new Lang.Class({
         for (let param in params)
             params[param] = params[param].deep_unpack();
 
-        let monitorIndex = params['monitor'] || -1;
-        let label = params['label'] || undefined;
-        let level = params['level'] || undefined;
-        let maxLevel = params['max_level'] || undefined;
+        let { monitor: monitorIndex,
+              label,
+              level,
+              max_level: maxLevel,
+              icon: serializedIcon } = params;
+
+        if (monitorIndex === undefined)
+            monitorIndex = -1;
 
         let icon = null;
-        if (params['icon'])
-            icon = Gio.Icon.new_for_string(params['icon']);
+        if (serializedIcon)
+            icon = Gio.Icon.new_for_string(serializedIcon);
 
         Main.osdWindowManager.show(monitorIndex, icon, label, level, maxLevel);
     },